﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sy5_12
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Text = "个人开销统计（元）"; // 设置窗体标题
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                // 1. 清空PictureBox之前的绘制
                pictureBox1.Refresh();
                Graphics g = pictureBox1.CreateGraphics();
                g.SmoothingMode = SmoothingMode.AntiAlias; // 抗锯齿

                // 2. 平移坐标系到(5, h)（h为PictureBox高度的1/2）
                float h = pictureBox1.ClientSize.Height / 2;
                g.TranslateTransform(5, h);

                // 3. 绘制坐标轴（y轴、x轴）
                Pen p = new Pen(Color.Black, 3);
                p.EndCap = LineCap.ArrowAnchor; // 线帽设为箭头
                g.DrawLine(p, 0, 0, 0, -h + 10); // 绘制y轴（向上延伸）
                g.DrawLine(p, 0, 0, pictureBox1.ClientSize.Width - 15, 0); // 绘制x轴

                // 4. 读取输入的5类消费数据
                float[] data = new float[5];
                data[0] = float.Parse(textBox1.Text); // 餐饮
                data[1] = float.Parse(textBox2.Text); // 服装
                data[2] = float.Parse(textBox3.Text); // 娱乐
                data[3] = float.Parse(textBox4.Text); // 房租
                data[4] = float.Parse(textBox5.Text); // 交通

                // 5. 计算最大数据值max，以及放大倍数bl（让max对应柱高h migrationBuilder: 10）
                float max = 0;
                for (int i = 0; i < 5; i++)
                {
                    if (data[i] > max) max = data[i];
                }
                float bl = (h - 10) / max; // 柱高放大倍数

                // 6. 定义渐变色画刷（红→蓝渐变）
                Point pt1 = new Point(0, 0);
                Point pt2 = new Point(0, 25);
                LinearGradientBrush lb = new LinearGradientBrush(pt1, pt2, Color.Red, Color.Blue);

                // 7. 循环绘制柱形图
                int x = 25; // 第一个柱的x坐标
                for (int i = 0; i < data.Length; i++)
                {
                    // 计算当前柱的高度（数据×放大倍数）
                    float y = data[i] * bl;
                    // 定义柱形的矩形区域（宽25，高为y）
                    Rectangle rect = new Rectangle(x, 0, 25, (int)-y);
                    // 填充柱形（渐变色）
                    g.FillRectangle(lb, rect);
                    // 绘制柱形边框
                    g.DrawRectangle(Pens.Black, rect);

                    x += 50; // 下一个柱的x坐标（柱宽25 + 间距25）
                }

                // 8. 绘制x轴分类标签
                Font f = new Font("宋体", 10, FontStyle.Bold);
                SolidBrush sb = new SolidBrush(Color.Black);
                string[] labels = { "餐饮", "服装", "娱乐", "房租", "交通" };
                x = 30; // 第一个标签的x坐标
                for (int i = 0; i < labels.Length; i++)
                {
                    g.DrawString(labels[i], f, sb, x, 5);
                    x += 50;
                }

                // 9. 释放资源
                p.Dispose();
                lb.Dispose();
                f.Dispose();
                sb.Dispose();
                g.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"输入错误：{ex.Message}", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }
}
